#include "/project/public/_public.h"
/*
	本程序用来删除历史数据文件
*/

//程序退出和信号2,15处理函数 void EXIT(int sig); 
void EXIT(int sig);
int main(int argc,char* argv[])
{
	//for(int i=0; i<argc; ++i)
	//{
	//	printf("%s\n",argv[i]);
	//}
	//程序的帮助
	if(4!=argc)
	{
		printf("\nUsing:/project/tools1/bin/deletefiles pathname matchstr timeout\n\n");
		printf("Example:/project/tools1/bin/deletefiles /log/idc \"*.log.20*\" 0.02\n");
		printf("        /project/tools1/bin/deletefiles /tmp/idc/surfdata \"*.xml,*.json\" 0.01\n");
		printf("        /project/tools1/bin/deletefiles /project/tools1/bin/deletefiles /log/idc \"*.log.20*\" 0,02\n");
		printf("        /project/tools1/bin/procctl 300 /project/tools1/bin/deletefiles /tmp/idc/surfdata \"*.xml,*.json\" 0.01\n\n");
		printf("这是一个工具程序,用于删除历史的数据文件或日志\n");
		printf("本程序把pathname目录级子目录中timeout天之前的匹配matchstr文件全部删除,timeout可以是小数\n");
		printf("本程序不写日志文件,也不会再控制台输出任何信息\n\n");
		return -1;
	}
	//关闭全部的信号和输入输出
	//设置信号,在shell状态下可用"kill + 进程号"正常终止这些程序
	//但请不要用"kill -9 +进程号"强行终止
    //CloseIOAndSignal(true);
	signal(SIGINT,EXIT);
	signal(SIGTERM,EXIT);

	//获取文件超时的时间点
	char strTimeOut[21];
	LocalTime(strTimeOut,"yyyy-mm-dd hh24:mi:ss",0-static_cast<int>(atof(argv[3])*24*60*60));
	//打开目录:CDir.OpenDir()
	CDir dir;
	if(false == dir.OpenDir(argv[1],argv[2],10000,true))
	{
		printf("dir.OpenDir(%s) failed.\n",argv[1]);
		return -1;
	}

	//遍历目录中的文件名
	while(true)
	{
		//得到一个文件的信息,CDir.ReadDir()
		if(!dir.ReadDir())
			break;
		//printf("DirName=%s,FileName=%s,FullFileName=%s,FileSize=%d,ModifyTime=%s,CreateTime=%s,AccessTime=%s\n",dir.m_DirName,dir.m_FileName,dir.m_FullFileName,dir.m_FileSize,dir.m_ModifyTime,dir.m_CreateTime,dir.m_AccessTime);
		//printf("FullFileName=%s\n",dir.m_FullFileName);
		//与超时的时间点比较,如果更早,就需要压缩
		if(strcmp(dir.m_ModifyTime,strTimeOut)<0)
		{
			if(REMOVE(dir.m_FullFileName))
				printf("REMOVE %s 0k. \n",dir.m_FullFileName);
			else
				printf("REMOVE %s failed. \n",dir.m_FullFileName);

		}
	}
	return 0;
}

void EXIT(int sig)
{
	printf("程序退出,sig = %d\n\n",sig);
	exit(0);
}
